#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void MOTOR_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}

void FAN_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_ResetBits(GPIOB, GPIO_Pin_1);
}

void Light_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); 
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 | GPIO_Pin_4 |
GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 
	| GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
}

void Light_TURN(void){ 
	if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_3) == 0){
		GPIO_SetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
	}
	else{
		GPIO_ResetBits(GPIOB, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
	}
}

uint8_t Light_EACH_TURN(void){
	while(1){
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_SetBits(GPIOB , GPIO_Pin_8);
		Delay_ms(500);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_ResetBits(GPIOB , GPIO_Pin_8);
		GPIO_SetBits(GPIOB , GPIO_Pin_7);
		Delay_ms(500);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_ResetBits(GPIOB , GPIO_Pin_7);
		GPIO_SetBits(GPIOB , GPIO_Pin_6);
		Delay_ms(500);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_ResetBits(GPIOB , GPIO_Pin_6);
		GPIO_SetBits(GPIOB , GPIO_Pin_5);
		Delay_ms(500);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_ResetBits(GPIOB , GPIO_Pin_5);
		GPIO_SetBits(GPIOB , GPIO_Pin_4);
		Delay_ms(500);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
		GPIO_ResetBits(GPIOB , GPIO_Pin_4);
		GPIO_SetBits(GPIOB , GPIO_Pin_3);
		Delay_ms(500);
		GPIO_ResetBits(GPIOB , GPIO_Pin_3);
		if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0){
			Delay_ms(10);
			while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) == 0);
			return 0;
		}
	}	
}
